import { defineStore } from 'pinia'
// import userApi from '@/api/user'
import { default as userApi } from '@/api/user'
import type { LoginParamsData, UserInfoData } from '@/api/user'
import {staticRoutes} from '@/router/routes'
import type { RouteRecordRaw } from 'vue-router'
interface UserInfoStateData {
  token: string
  userInfo: UserInfoData,
  menuRoutes:RouteRecordRaw[]
}
export const useUserInfoStore = defineStore('userInfo', {
  state(): UserInfoStateData {
    return {
      // token:'', //不考虑自动登录情况 也就是在localstorage里存
      token: localStorage.getItem('token_key') || '', //自动登录
      //
      userInfo: {
        routes: [],
        buttons: [],
        roles: [],
        name: '',
        avatar: '',
      },
      menuRoutes:staticRoutes,
    }
  },
  actions: {
    //用户登录的逻辑，首先会调用 userApi.postUserLogin 方法，将用户名和密码发送给后端服务器，如果登录成功，则会返回一个 token，并将 token 保存到 this.token 属性中，如果登录失败，则会抛出一个错误。
    async login(loginParams: LoginParamsData) {
      try {
        const result = await userApi.postUserLogin(loginParams)
        this.token = result.token
        localStorage.setItem('token_key', result.token)
        return 'ok';
      } catch (error) {
        return Promise.reject('登录失败')
      }
    },
    //获取用户信息的逻辑
    async getUserInfo() {
      try {
        const result = await userApi.getUserInfo()
        this.userInfo = result
        return 'ok'
      } catch (error) {
        return Promise.reject('获取用户信息失败')
      }
    },

    //需要重置一些状态和数据时，调用该函数可以将相关状态和数据恢复到初始状态。
    reset() {
      this.token = '';
      localStorage.removeItem('token_key')
      this.userInfo = {
        routes: [],
        buttons: [],
        roles: [],
        name: '',
        avatar: '',
      }
    },
    //退出登录的逻辑
    async logout() {
      try {
        await userApi.postLogout();
        this.reset();
        return 'ok';
      } catch (error) {
        return Promise.reject('退出登录失败')
      }
    },
  },
  getters: {},
})
